//package com.manor.common.lyb.base
//
//import android.app.Activity
//import android.app.AlertDialog
//import android.content.ComponentCallbacks2
//import android.content.ContentResolver
//import android.content.Context
//import android.content.Intent
//import android.content.pm.ActivityInfo
//import android.content.res.Configuration
//import android.content.res.Resources
//import android.database.Cursor
//import android.net.Uri
//import android.os.Build
//import android.os.Bundle
//import android.os.ParcelFileDescriptor
//import android.provider.MediaStore
//import android.text.TextUtils
//import android.view.MotionEvent
//import android.view.View
//import android.view.inputmethod.InputMethodManager
//import android.widget.EditText
//import androidx.core.app.ActivityCompat
//import androidx.core.content.ContextCompat
//import com.blankj.utilcode.util.ClickUtils
//import com.blankj.utilcode.util.StringUtils
//import com.blankj.utilcode.util.ToastUtils
//import com.bumptech.glide.Glide
//import com.kongzue.dialog.v3.TipDialog
//import com.kongzue.dialog.v3.WaitDialog
//import com.lzy.okgo.OkGo
//import com.lzy.okgo.Urls
//import com.lzy.okgo.model.LzyResponse
//import com.lzy.okgo.model.Response
//import com.manor.common.R
//import com.manor.common.utils.EventBusUtil
//import com.manor.common.utils.GlideUtil
//import com.umeng.analytics.MobclickAgent
//import com.xz.freshmall.ActivityCollector
//import com.yalantis.ucrop.UCrop
//import com.yalantis.ucrop.UCropActivity
//import kotlinx.coroutines.GlobalScope
//import kotlinx.coroutines.launch
//import me.imid.swipebacklayout.lib.app.SwipeBackActivity
//import me.jessyan.autosize.internal.CustomAdapt
//import java.io.File
//import java.io.FileInputStream
//import java.io.FileNotFoundException
//import java.io.IOException
//import java.text.SimpleDateFormat
//import java.util.*
//
//
///**
// * @作者：liuyuanbo
// * @时间：2018/9/30
// * @邮箱：972383753@qq.com
// * @用途：所有Activity的基类
// */
//abstract class BaseActivity : SwipeBackActivity(), View.OnClickListener, CustomAdapt {
//    /**
//     * 是否按照宽度进行等比例适配 (为了保证在高宽比不同的屏幕上也能正常适配, 所以只能在宽度和高度之中选择一个作为基准进行适配)
//     *
//     * @return {@code true} 为按照宽度进行适配, {@code false} 为按照高度进行适配
//     *
//     * 以高度进行适配时，recyclerView有影响
//     */
//    override fun isBaseOnWidth(): Boolean = false
//
//    /**
//     * 设计图尺寸为 1080px * 1920px, 高换算成 dp 为 960 (1920px / 2 = 960dp)
//     * <p>
//     * 返回的设计尺寸, 单位 dp
//     * {@link #getSizeInDp} 须配合 {@link #isBaseOnWidth()} 使用, 规则如下:
//     * 如果 {@link #isBaseOnWidth()} 返回 {@code true}, {@link #getSizeInDp} 则应该返回设计图的总宽度
//     * 如果 {@link #isBaseOnWidth()} 返回 {@code false}, {@link #getSizeInDp} 则应该返回设计图的总高度
//     * 如果您不需要自定义设计图上的设计尺寸, 想继续使用在 AndroidManifest 中填写的设计图尺寸, {@link #getSizeInDp} 则返回 {@code 0}
//     *
//     * @return 单位 dp
//     */
//    override fun getSizeInDp(): Float = 0f
//
//    override fun onCreate(savedInstanceState: Bundle?) {
//        super.onCreate(savedInstanceState)
//        if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
//            finish()
//            return
//        }
//        beforeSetContentView()
//
//        if (0 != setLayoutResourceId()) {
//            setContentView(setLayoutResourceId())
//        }
//        ImmersionBar.with(this).statusBarColor(R.color.white).autoDarkModeEnable(true).init()
////        setStatusBarColor()
//
//        ActivityCollector.addActivity(this)
//        setContextS()
//        initAllViews()
//        setWithSavedInstanceState(savedInstanceState)
//        initViewsListener()
//        getAttribute(intent)
//    }
////    fun setStatusBarColor(color: Int = Color.BLUE, alpha: Int = 0) {
////        StatusBarUtil.setColor(this, color, alpha)
////    }
//    /**
//     * 一些在setContent之前才生效的方法
//     * 类似于设置全屏
//
//     * @return
//     */
//    open fun beforeSetContentView() {}
//    fun fixStatusBarHeight(){
//        ImmersionBar.with(this).fitsSystemWindows(true).init()
//    }
//    /**
//     * 设置Context
//
//     * @return
//     */
//    protected abstract fun setLayoutResourceId(): Int
//
//    /**
//     * 设置和savedInstanceState相关的东西
//
//     * @return
//     */
//    open fun setWithSavedInstanceState(savedInstanceState: Bundle?) {}
//
//    /**
//     * 设置根布局资源id
//
//     * @return
//     */
//    private fun setContextS() {}
//
//    /**
//     * 设置需不需要加载动画
//
//     * @return
//     */
//    protected abstract fun needLoadingView(): Boolean
//
////    protected abstract fun needSwipeBack(): Boolean
//
//    /**
//     * 初始化控件的方法
//     */
//    protected abstract fun initAllViews()
//
//    /**
//     * 设置控件的事件 －－ 点击事件之类的
//     */
//    protected abstract fun initViewsListener()
//
//    /**
//     * 获取传递参数
//     */
//    protected open fun getAttribute(intent: Intent) {}
//
//    protected fun registerEventBus() {
//        EventBusUtil.register(this)
//    }
//
//    override fun onClick(v: View) {
//        if (!AntiShakeUtils.isValid(v, App.CLICK_TIME_INTERVAL)) return
//        when (v.id) {
//            R.id.mBackIv -> {
//                finish()
//            }
//            R.id.mRightTitleTv -> {
//            }
//            R.id.mRightIv -> {
//            }
//            R.id.mTitleTv -> {
//            }
//        }
//    }
//
//    /**
//     * 设置页面的标题
//     * @param title
//     * @param type
//     *        0 -- 只有一个返回键和标题
//     *        1 -- 只有标题
//     *        2 -- 包含右侧标题
//     */
//    protected fun setTopTitle(
//        title: String, type: Int = 0, titleTvColor: Int = R.color.color_33,
//        rightTitle: String = "", rightTvColor: Int = R.color.color_33,
//        leftColor: Int = R.color.black, leftIv: Int = R.drawable.back_black,
//        bgColor: Int = R.color.white,
//        rightIv: Int = -1, lineShow: Boolean = true
//    ) {
//        mBackTv.setTextColor(ContextCompat.getColor(this, leftColor))
//        mTitleBgLayout.setBackgroundColor(ContextCompat.getColor(this, bgColor))
//        mBackIv.setImageResource(leftIv)
//        setClick(mBackIv)
//
//        if (!TextUtils.isEmpty(rightTitle)) {
//            mRightTitleTv.text = rightTitle
//            setClick(mRightTitleTv)
//            mRightTitleTv.setTextColor(ContextCompat.getColor(this, rightTvColor))
//            mRightTitleTv.visibility = View.VISIBLE
//        }
//        if (rightIv > 0) {
//            mRightIv.setImageResource(rightIv)
//            setClick(mRightIv)
//            mRightIv.visibility = View.VISIBLE
//        }
//        when (type) {
//            1 -> {
//                mBackLayout.visibility = View.GONE
//            }
//        }
//        setClick(mTitleTv)
//        mTitleTv.text = title
//        mTitleTv.setTextColor(ContextCompat.getColor(this, titleTvColor))
//        if (lineShow) {
//            mLineView.visibility = View.VISIBLE
//        } else {
//            mLineView.visibility = View.GONE
//        }
//    }
//
//    /**
//     * WaitDialog / TipDialog
//     *
//     * 属于长时间提示功能的组件，且内存中只会创建一次，不会重复创建直到被 dismiss() 关闭
//     */
//    fun showLoadingDialog(msg: String = "请稍后...") {
//        WaitDialog.show(this, msg)
//    }
//
//    fun dismissLoadingDialog(msg: String = "", type: Int = 0) {
//        WaitDialog.dismiss()
//        showTipDialog(msg, type)
//        if (!StringUtils.isTrimEmpty(msg)) {
//
//            if (type == 0) {
//                TipDialog.show(this, msg, TipDialog.TYPE.SUCCESS).setTipTime(1500)
//            } else {
//                TipDialog.show(this, msg, TipDialog.TYPE.WARNING).setTipTime(1500)
//            }
//        }
//    }
//
//    fun showTipDialog(msg: String = "", type: Int = 0) {
//        if (!StringUtils.isTrimEmpty(msg)) {
//            if (type == 0) {
//                TipDialog.show(this, msg, TipDialog.TYPE.SUCCESS).setTipTime(1500)
//            } else {
//                TipDialog.show(this, msg, TipDialog.TYPE.WARNING).setTipTime(1500)
//            }
//        }
//    }
//
//    override fun onDestroy() {
//        super.onDestroy()
//        ActivityCollector.removeActivity(this)
//        EventBusUtil.unRegister(this)
//        EventBusUtil.unRegisterSticky(this)
//        dismissLoadingDialog()
//
//    }
//
//    fun showT(msg: String?) {
//        ToastUtils.showShort(msg)
//    }
//
//    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
//        if (ev.action == MotionEvent.ACTION_DOWN) {
//            val v = currentFocus
//            if (isShouldHideInput(v, ev)) {//点击editText控件外部
//                assert(v != null)
//                v?.let { closeKeyboard(it) }
//                if (editText != null) {
//                    editText?.clearFocus()
//                }
//            }
//            return super.dispatchTouchEvent(ev)
//        }
//        // 必不可少，否则所有的组件都不会有TouchEvent了
//        return window.superDispatchTouchEvent(ev) || onTouchEvent(ev)
//    }
//
//    private var editText: EditText? = null
//
//    fun isShouldHideInput(v: View?, event: MotionEvent): Boolean {
//        if (v != null && v is EditText) {
//            editText = v
//            val leftTop = intArrayOf(0, 0)
//            //获取输入框当前的location位置
//            v.getLocationInWindow(leftTop)
//            val left = leftTop[0]
//            val top = leftTop[1]
//            val bottom = top + v.height
//            val right = left + v.width
//            return !(event.x > left && event.x < right
//                    && event.y > top && event.y < bottom)
//        }
//        return false
//    }
//
//    // 返回时关闭软键盘
//    fun closeKeyboard(v: View) {
//        if (v != null) {
//            (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(
//                v.windowToken,
//                0
//            )
//        }
//    }
//
//    fun showKeyBoard(view: View) {
//        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
//        imm.showSoftInput(view, InputMethodManager.SHOW_FORCED)
//    }
//
//    fun showHintDialog(aty: Activity, str: String) {
//        AlertDialog.Builder(aty).setTitle("提示").setMessage(str)
//            .setPositiveButton("确定") { _, _ -> }.show()
//    }
//
//    override fun onLowMemory() {
//        super.onLowMemory()
//        GlideUtil.clearMemory(this)
//        GlobalScope.launch {
//            GlideUtil.clearDiskCache()
//        }
//    }
//
//    override fun onTrimMemory(level: Int) {
//        super.onTrimMemory(level)
//        if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
//            GlobalScope.launch {
//                runOnUiThread {
//                    GlideUtil.clearMemory(this@BaseActivity)
//                }
//            }
//            Glide.get(this).trimMemory(level)
//        }
//    }
//
//    override fun onResume() {
//        super.onResume()
//        MobclickAgent.onResume(this)
//    }
//
//    override fun onPause() {
//        super.onPause()
//        MobclickAgent.onPause(this)
//    }
//
//    /**
//     * WaitDialog / TipDialog
//     *
//     * 属于长时间提示功能的组件，且内存中只会创建一次，不会重复创建直到被 dismiss() 关闭
//     */
//    fun showWaitDialog(msg: String = "请稍后...") {
//        WaitDialog.show(this, msg).cancelable = true
//    }
//
//    fun dismissDialog(msg: String = "", type: Int = 0) {
//        WaitDialog.dismiss()
//        if (!StringUtils.isTrimEmpty(msg) && !isFinishing && !isDestroyed) {
//            if (type == 0) {
//                TipDialog.show(this, msg, TipDialog.TYPE.SUCCESS).setTipTime(1500)
//            } else {
//                TipDialog.show(this, msg, TipDialog.TYPE.WARNING).setTipTime(1500)
//            }
//        }
//    }
//
//    override fun getResources(): Resources {
//        val res = super.getResources()
//        val config = Configuration()
//        config.setToDefaults()
//        res.updateConfiguration(config, res.displayMetrics)
//        return res
//    }
//
//    override fun onConfigurationChanged(newConfig: Configuration) {
//        if (newConfig.fontScale != 1f){//非默认值
//            resources
//        }
//        super.onConfigurationChanged(newConfig)
//    }
//    fun choicePic() {
//        Matisse.from(this)
//            .choose(MimeType.ofImage())
//            .countable(true)
//            .maxSelectable(1)
//            .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
//            .thumbnailScale(0.85f)
//            .imageEngine(GlideEngine())
////            .showPreview(false) // Default is `true`
//            .forResult(RequestCode.CHOICE_PICTURE)
//    }
//
//    fun startCrop(uri: Uri) {
//        //裁剪后保存到文件中
//        val simpleDateFormat = SimpleDateFormat("yyyyMMddHHmmss")
//        val date = Date()
//        val imageName = simpleDateFormat.format(date)
//        var destinationUri: Uri
//        destinationUri = Uri.fromFile(File(cacheDir, "$imageName.jpeg"))
//
//        var uCrop = UCrop.of(uri, destinationUri)
////        UCrop.of(uri, destinationUri).useSourceImageAspectRatio().start(this, RequestCode.CROP_IMAGE)
//        //是否能调整裁剪框
//
//        //初始化UCrop配置
//        var options: UCrop.Options = UCrop.Options()
//        //设置裁剪图片可操作的手势
//        options.setAllowedGestures(UCropActivity.SCALE, UCropActivity.ROTATE, UCropActivity.ALL)
//        //是否隐藏底部容器，默认显示
////        options.setHideBottomControls(true)
//        //设置toolbar颜色
//        options.setToolbarColor(ActivityCompat.getColor(this, R.color.colorPrimary))
//        //设置状态栏颜色
//        options.setStatusBarColor(ActivityCompat.getColor(this, R.color.colorPrimary))
//        //是否能调整裁剪框
//        options.setFreeStyleCropEnabled(true)
//        //UCrop配置
//        uCrop.withOptions(options)
//        //设置裁剪图片的宽高比，比如16：9
//        uCrop.withAspectRatio(1f, 1f)
//        uCrop.start(this, RequestCode.CROP_IMAGE)
//    }
//
//    fun getRealPathFromUri(uri: Uri): String {
//        var cursor: Cursor? = null
//        val column: String = MediaStore.MediaColumns.DATA
//        val projection = arrayOf(column)
//        var path = ""
//        // 以 file:// 开头的
//        if (ContentResolver.SCHEME_FILE == uri.scheme) {
//            path = uri.path.toString()
//            return path
//        }else{
//            cursor = contentResolver?.query(uri, projection, null, null, null)
//            if (cursor != null && cursor.moveToFirst()) {
//                val columnIndex: Int = cursor.getColumnIndexOrThrow(column)
//                path = cursor.getString(columnIndex)
//            }
//        }
//        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
//            path = getFileByUri(uri)?.absolutePath.toString()
//            return path
//        } else { //安卓10
//            var descriptor: ParcelFileDescriptor? = null
//            try {
//                descriptor = contentResolver?.openFile(uri, "r", null)!!
//                val inputStream = FileInputStream(descriptor.fileDescriptor)
//                val byteArray = FileUtilsToQ.readBinaryStream(
//                    inputStream,
//                    descriptor.statSize.toInt()
//                )
//                val split = path.split("/".toRegex()).toTypedArray()
//                if (split.isNotEmpty()) {
//                    val dir = PathConfig.getFolderAdapter_Q(PathConfig.FOLDER_NAME_IMAGE, false)
//                    val cachedFile = File(dir, split[split.size - 1])
//                    val fileSaved = FileUtilsToQ.writeFile(cachedFile, byteArray)
//                    if (fileSaved) {
//                        path = cachedFile.absolutePath
//                    } else {
//                        path = ""
//                    }
//                }
//            } catch (e: FileNotFoundException) {
//                return path
//            } finally {
//                if (descriptor != null) {
//                    try {
//                        descriptor.close()
//                    } catch (e: IOException) {
//                        e.printStackTrace()
//                    }
//                }
//                ToastUtils.showShort("cuole")
//                return path
//            }
//        }
//    }
//    private fun getFileByUri(uri: Uri): File? {
//        var path: String? = null
//        if ("file" == uri.scheme) {
//            path = uri.encodedPath
//            if (path != null) {
//                path = Uri.decode(path)
//                val cr = contentResolver
//                val buff = StringBuffer()
//                buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=").append("'$path'").append(")")
//                val cur = cr?.query(
//                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
//                    arrayOf(MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA),
//                    buff.toString(),
//                    null,
//                    null
//                )
//                var index = 0
//                var dataIdx = 0
//                cur!!.moveToFirst()
//                while (!cur.isAfterLast) {
//                    index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID)
//                    index = cur.getInt(index)
//                    dataIdx = cur.getColumnIndex(MediaStore.Images.ImageColumns.DATA)
//                    path = cur.getString(dataIdx)
//                    cur.moveToNext()
//                }
//                cur.close()
//                if (index == 0) {
//                } else {
//                    val u = Uri.parse("content://media/external/images/media/$index")
//                    println("temp uri is :$u")
//                }
//            }
//            if (path != null) {
//                return File(path)
//            }
//        } else if ("content" == uri.scheme) {
//            // 4.2.2以后
//            val proj = arrayOf(MediaStore.Images.Media.DATA)
//            val cursor = contentResolver?.query(uri, proj, null, null, null)
//            if (cursor?.moveToFirst() == true) {
//                val columnIndex = cursor?.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
//                path = cursor.getString(columnIndex)
//            }
//            cursor?.close()
//            return File(path)
//        } else {
//            //Log.i(TAG, "Uri Scheme:" + uri.getScheme());
//        }
//        return null
//    }
//    fun setClick(vararg views: View){
//        for (it in views){
//            ClickUtils.applySingleDebouncing(it, 500, this)
//        }
//    }
//
//    fun refreshUserInfo(){
//        OkGo.post<LzyResponse<UserEntity>>(Urls.USER_INFO)
//            .execute(object : JsonCallback<LzyResponse<UserEntity>>(this) {
//                override fun onSuccess(response: Response<LzyResponse<UserEntity>>) {
//                    super.onSuccess(response)
//                    UserOperateUtil.saveUser(response.body().data)
//                }
//            })
//    }
//}
